package main

import (
	"fmt"
	"sync"
)

// 定义一个变量
var totalNum int

// 只定义无需赋值
var wg sync.WaitGroup

// 加入一个互斥锁
var lock sync.Mutex

func add() {
	defer wg.Done() //计数牌减1
	for j := 0; j < 10000; j++ {
		lock.Lock() //加锁
		totalNum = totalNum + 1
		lock.Unlock() //解锁
	}
}

func sub() {
	defer wg.Done() //计数牌减1
	for j := 0; j < 10000; j++ {
		lock.Lock() //加锁
		totalNum = totalNum - 1
		lock.Unlock() //解锁
	}
}

func main() { //主线程
	wg.Add(2) //计数牌加1
	go add()  //开启一个协程
	go sub()  //开启一个协程
	wg.Wait() //等待所有的协程都结束
	fmt.Println(totalNum)
}
